package fr.esisar.cs420.swt;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;

import fr.esisar.cs420.traitement.Album;
import fr.esisar.cs420.traitement.InfoAlbum;
import fr.esisar.cs420.traitement.Livre;



public class VisualiseLivre extends Shell {

	int ordre = 1 ;
	
	int visible = 0 ;
	
	int idAlbum ;
	
	private Table table;
	private Text Erreur;
	private String element ;
	
	
	/**
	 * Create the shell.
	 * @param display
	 */
	public VisualiseLivre(final Display display, int visible) {
		super(display, SWT.SHELL_TRIM);
		
		Group grpChoix = new Group(this, SWT.NONE);
		grpChoix.setText("Choix");
		grpChoix.setBounds(7, 10, 238, 325);
		
		
		Group grpVisualisation = new Group(this, SWT.NONE);
		grpVisualisation.setText("Visualisation");
		grpVisualisation.setBounds(271, 10, 383, 438);
		
		
		Erreur = new Text(this, SWT.BORDER | SWT.CENTER | SWT.MULTI);
		Erreur.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
		Erreur.setBounds(10, 356, 235, 92);
		
		final Label lblVisualisation = new Label(grpVisualisation, SWT.NONE);
		lblVisualisation.setBounds(10, 22, 360, 360);
		
		final TableViewer tableViewer = new TableViewer(grpChoix, SWT.BORDER | SWT.FULL_SELECTION);
		table = tableViewer.getTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				ordre = 1;
				
				org.eclipse.swt.graphics.Point p = new org.eclipse.swt.graphics.Point(e.x,e.y);
				
		     	ViewerCell cell = tableViewer.getCell(p);
				
				if(cell != null){
				
					element = (String) cell.getElement() ;
					
					idAlbum = Album.getElementId(element);
					
					String chemin = Album.afficher(idAlbum ,  ordre);
					
					if(chemin == null){
						
						Erreur.setText("Erreur :\r\nPas de photo dans cet album");
						lblVisualisation.setImage(null);
						
					}
					else{
						
						Image imageVisualisation = new Image(display,chemin) ;
						
						imageVisualisation = resize(imageVisualisation,360,360);
						
						lblVisualisation.setImage(imageVisualisation);
					}
				}
				
			}
		});
		table.setBounds(3, 15, 232, 310);
		
		Button btnImageSuivante = new Button(grpVisualisation, SWT.NONE);
		btnImageSuivante.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nd'album");
					
				}else {
				
					ordre = ordre + 1;
					
					String chemin = Album.afficher(idAlbum, ordre);
					
					if(chemin == null){
						
						Erreur.setText("Erreur :\r\n Pas ou plus de photo dans cet album");
						
						ordre -= 1 ;
						
					}
					else{
						
						
					
						Image imageVisualisation = new Image(display,chemin) ;
						
						imageVisualisation = resize(imageVisualisation,360,360);
						
						lblVisualisation.setImage(imageVisualisation);
					}
				}
				
				
			}
		});
		btnImageSuivante.setBounds(261, 403, 109, 25);
		btnImageSuivante.setText("Image suivante");
		
		Button btnImagePrcdente = new Button(grpVisualisation, SWT.NONE);
		btnImagePrcdente.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				ordre = ordre - 1;
				
				Erreur.setText("");
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nd'album");
					
				}else {
					
					if(ordre <=0 )
					{
						ordre = 1 ;
						Erreur.setText("Erreur :\r\n Pas ou plus de photo dans cet album");
						
					}			
					else{
						
						String chemin = Album.afficher(idAlbum, ordre);
						
						if(chemin == null){
							
							Erreur.setText("Erreur :\r\n Erreur :\r\n Pas ou plus de photo dans cet album ");
							
						}
						else{
						
							Image imageVisualisation = new Image(display,chemin) ;
							
							imageVisualisation = resize(imageVisualisation,360,360);
							
							lblVisualisation.setImage(imageVisualisation);
						}
					
					}
				}
				
			}
		});
		btnImagePrcdente.setText("Image précédente");
		btnImagePrcdente.setBounds(10, 403, 109, 25);
		

				
		createContents();
		
	    // The input will be an array or a collection.
	    // We will need every element of this input.
		tableViewer.setContentProvider( new ArrayContentProvider());
		
	    // For very element to display, we will display its default string
		// (i.e. Object#toString()).
		tableViewer.setLabelProvider( new LabelProvider());
			
		Livre.getLivre(visible);
				
	    // Eventually, let's define an input
		List<InfoAlbum> listAlbumPublic = Album.getList();
		
		 List<String> listAlbumString = new ArrayList<String>();
		 
		 int i = 0 ;
		 
		 while( i < listAlbumPublic.size()) {
			 
			 listAlbumString.add(listAlbumPublic.get(i).getTitre());
			 i++;
		 }
		
		
		tableViewer.setInput( listAlbumString );
		
		

	}
	

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("Visualisation Albums publics");
		setSize(680, 496);

	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	protected DataBindingContext initDataBindings() {
		DataBindingContext bindingContext = new DataBindingContext();
		//
		return bindingContext;
	}
	
	private Image resize(Image image, int width, int height) {
		
		Image scaled = new Image(Display.getDefault(), width, height);
		GC gc = new GC(scaled);
		gc.setAntialias(SWT.ON);
		gc.setInterpolation(SWT.HIGH);
		gc.drawImage(image, 0, 0, 
		image.getBounds().width, image.getBounds().height, 
		0, 0, width, height);
		gc.dispose();
		image.dispose(); // don't forget about me!
		return scaled;
		}
	
	
}
